package main

import (
	"fmt"
	"net"
	"strings"
)

func main() {
	// 创建监听
	ip := "127.0.0.1"
	port := 8848
	address := fmt.Sprintf("%s:%d", ip, port)
	// 也可以这样写，冒号前面默认是本机：127.0.0.1
	// net.Listen("tcp", ":8848")
	// 也可以写完整：net.Listen("tcp", "127.0.0.1:8848")
	// 方法：
	// func Listen(network, address string) (Listener, error) {
	// 	var lc ListenConfig
	// 	return lc.Listen(context.Background(), network, address)
	// }
	listener, err := net.Listen("tcp", address)
	if err != nil {
		fmt.Println("net.Listen() err:", err)
		return
	}
	fmt.Println("监听中……")
	// Accept() (Conn, error)
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("listener.Accept() err:", err)
		return
	}
	fmt.Println("连接建立成功！")

	// 创建容器用于读取到的数据
	buf := make([]byte, 1024) // 需要使用make来创建切片
	cnt, err := conn.Read(buf)
	if err != nil {
		fmt.Println("conn.Read() err:", err)
		return
	}
	fmt.Println("从Client读取到的数据，长度：", cnt)
	fmt.Println("读取到的数据：", string(buf[:cnt]))

	// 将数据转换成大写
	upperString := strings.ToUpper(string(buf))
	fmt.Println("转换成大写：", upperString)

	cnt, err = conn.Write([]byte(upperString))
	if err != nil {
		fmt.Println("conn.Write() err:", err)
		return
	}
	fmt.Println("向Client发送数据，长度：", cnt)
	fmt.Println("发送的数据：", upperString)

	// 关闭链接
	defer conn.Close()
}
